In a magnetic recording medium, and particularly, on a magnetic tape, it is necessary that as much information as possible be stored per surface unit area. However, the number of possible flux changes per unit length is limited both by the electrical and mechanical characteristics of the medium, for example a tape. For this reason it is desirable to use codes for which a given amount of data can be conveyed in the least possible number of flux changes. However, it is also desired that the selected code be self-synchronizing, so that a special timing or synchronization track is not required. A further requirement is that the code not result in low frequency or DC voltage components since the recording and read-out heads either cannot process these signals at all or cannot process them with sufficient resolution.
In the past, a number of different codes have been developed in which the above-mentioned requirements as to low flux change density, freedom from DC components, self-synchronization and ease of decodability have been met in varying degrees.
A code in which a relative dense storage of data signals is possible is the NRZ-L code. In this code, the binary number "0" is represented by one level, while the binary number "1" is represented by a second level. In a data sequence containing a plurality of the same valued binary numbers following one another, no change of level occurs and therefore no change in flux in the storage medium. In a statistical average, the number of flux changes is therefore less than the number of data bits. The NRZ-L code is therefore very suitable for storing data at a great storage density. It has, however, two drawbacks; first of all it is not self-timing, that is synchronization will be lost in the reproducing apparatus if a great number of equally valued binary numbers follow one another directly, since throughout the sequence no flux change will take place. For the same reason, the spectrum of the signals will have a high portion of low frequency or DC components which cannot be reproduced satisfactorily.
In order to achieve self-timing, a coding system known as the "Miller code" was developed. In the Miller code, each "1" binary number causes a flux change in the middle of the data bit, while each "0" which is preceded by a "1" causes no flux change, each "0" which is preceded by a "0" causing a flux change at the beginning of the bit. The data or information is therefore no longer contained in the levels, but rather in the flux changes. Since flux changes will occur even in relatively long sequences of binary "0"s the synchronization is not lost and the decoding process can take place even without a separate synchronization track. However, the code continues to have low frequency components which can result in changes in the base characteristic due to preponderance of one or the other level during a particular time period.
This condition led to the development of a "0 modulation code" in which the Miller code is modified in such a way that the signal containing the data has no DC component. The idea is to divide the stream of data into two types of sequences: first, sequences in which a number n of binary ones is enclosed by binary zeros and n differs from zero and, secondly, sequences in which a number n of binary ones follow one another. Sequences of the first type in which the number n is even and differs from zero have a DC component when a Miller code is used which, in a stream of such sequences if interrupted by sequences of the second type, may increase to an undefined value. All other data sequences have no DC components. In this system, in sequences having a DC component the zeros are treated in accordance with the Miller code, while the ones are treated as zeros but with every second flux change suppressed. Since the type of sequence can only be ascertained at the end of the sequence, a large number of storages are required which make the system relatively expensive.